//package com.chalk.config.rabbit;
//
//import com.chalk.common.constant.CommonConstants;
//import com.chalk.common.util.RedisUtil;
//import com.chalk.common.util.ResultCode;
//import com.chalk.service.ActivityCenterService;
//import com.chalk.vo.MsgBody;
//import com.rabbitmq.client.Channel;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.amqp.core.Message;
//import org.springframework.amqp.rabbit.annotation.RabbitListener;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
///**
// * @date: 2019-05-07 下午 12:28
// * @author: zhaobo0119@outlook.com
// * @Descriptopn:
// */
////@Component
//public class RabbitMQReceiver {
//
//    private final Logger logger = LoggerFactory.getLogger(this.getClass());
//
//    @Autowired
//    private RedisUtil redisUtil;
//    @Autowired
//    private ActivityCenterService activityCenterService;
//    /**
//     * 接受消息
//     * @param msg
//     */
//    @RabbitListener(queues = RabbitConfig.KILL_QUEUE)
//    public void receiverQueue(MsgBody msg, Message message, Channel channel) throws Exception {
//        logger.info("receiverQueue--------消费消息-------->message{}",msg.toString());
//        // 在消息确认之前不接收其他消息
//        channel.basicQos(1);
//        try {
//            ResultCode resultCode = activityCenterService.updateInventory(msg.getKillItemId(), msg.getMemberId(), msg.getActivityItemId(),msg.getBuyCount());
//            if(resultCode == ResultCode.SUCCESS){
//                // 已抢到用户
//                String boughtUsers = CommonConstants.BOUGHT_USERS + msg.getKillItemId();
//                redisUtil.sAdd(boughtUsers, msg.getMemberId());
//            }
//            //告诉服务器收到这条消息 已经被我消费了 可以在队列删掉 这样以后就不会再发了 否则消息服务器以为这条消息没处理掉 后续还会在发
//            channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
//            logger.info("【receiver-Queue监听到消息】" + msg);
//        } catch (Exception e) {
//            e.printStackTrace();
//            /**
//             * 如果失败重试这条消息 参数一：deliveryTag:该消息的index；参数二：是否批量； 第三个参数 requeue true：重试， false：丢弃消息
//             * 如果一直失败会进入死循环
//             */
//            channel.basicNack(message.getMessageProperties().getDeliveryTag(), false,false);
//            logger.info("----------receiver fail-----------");
//        }
//    }
//}
